home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 19 / CU Amiga Magazine's Super CD-ROM 19 (1998)(EMAP Images)(GB)[!][issue 1998-02].iso / CUCD / Magazine / SoundLab / Studio16add / sources / DumpCue.asm < prev    next >
Encoding:
Assembly Source File  |  1997-12-10  |  20.3 KB  |  969 lines

  1. *>b:DumpCue
  2.  
  3.     *«««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««*
  4.     *   Copyright © 1997 by Kenneth "Kenny" Nilsen.  E-Mail: kenny@bgnett.no              *
  5.     *   Source viewed in 800x600 with mallx.font (11) in CED                      *
  6.     *»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»*
  7.     *
  8.     *   Name
  9.     *    DumpCue
  10.     *
  11.     *   Function
  12.     *    DEMO - Dump cuelist files or track files
  13.     *
  14.     *   Inputs
  15.     *    [Cuelist file | track file]
  16.     *
  17.     *   Notes
  18.     *    This source is just meant as an example on how to read Cuelist files.
  19.     *    It was orignally written to test if the assembler include was correct.
  20.     *    It was written in a couple of hour and there are plenty of room for
  21.     *    optimizing and speed (read structures into memory at once etc..)
  22.     *    The slow speed is due to buffered IO and many subroutines.
  23.     *    It's not very well commented either..
  24.     *
  25.     *    The source is public domain - Do what you want with it..
  26.     *
  27.     *    There is also an AREXX version in the rexx/ directory.
  28.     *
  29.     *   Bugs
  30.     *    
  31.     *   Created    : 05.12.97
  32.     *   Changes    : 06.12.97, 08.12.97
  33.     *««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««*
  34.  
  35.  
  36. ;StartSkip    SET    1
  37. ;DODUMP        SET    1
  38.  
  39.         Incdir    inc:
  40.  
  41.         include    lvo/exec_lib.i
  42.         include    lvo/dos_lib.i
  43.  
  44.         include    digital.macs
  45.         include    digital.i
  46.         include    libraries/studio16file.i
  47.         include    lvo/mathieeedoubbas_lib.i
  48.         include    lvo/mathieeesingbas_lib.i
  49.  
  50.         include    dos/dos.i
  51.         include    exec/types.i
  52.  
  53.         include    startup.asm
  54.  
  55.         Incdir    ""
  56.  
  57.         dc.b    "$VER: DumpCue 1.1 (08.12.97)",10
  58.         dc.b    "Copyright © 1997 Digital Surface. All rights reserved. ",0
  59.         even
  60. *»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»*
  61. Dump    macro
  62. Error\1    move.l    #Err\1,d1
  63.     bra    Print
  64.     endm
  65.  
  66. xRead    macro
  67.     move.l    Han(pc),d1
  68.     move.l    \1,d2
  69.     move.l    #\2,d3
  70.     Call    Read
  71.     cmp.l    d0,d3
  72.     bne    ErrorRead
  73.     endm
  74.  
  75. yRead    macro
  76.     move.l    Han(pc),d1
  77.     move.l    \1,d2
  78.     move.l    \2,d3
  79.     Call    Read
  80.     cmp.l    d0,d3
  81.     bne    ErrorRead
  82.     endm
  83.  
  84. ReadString    macro
  85.     bsr    ReadStr
  86.     endm
  87.  
  88. FPrint    macro
  89.     lea    \1(pc),a0
  90.     bsr    FPrintSub
  91.     endm
  92.  
  93. Buffer    =    1024*10        ;for misc data
  94. *»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»*
  95. Init        DefLib    dos,37
  96.         DefLib    mathieeedoubbas,37
  97.         DefLib    mathieeesingbas,37
  98.         DefEnd
  99.  
  100. Start    NextArg            ;does user want help ?
  101.     beq    About
  102.     move.l    d0,a0
  103.     cmp.b    #'?',(a0)
  104.     beq    About
  105.     move.l    a0,IFile    ;store pointer to arg
  106.  
  107.     NextArg
  108.     bne    About        ;there should only be one arg
  109.  
  110. ; alloc some memory
  111.  
  112.     move.l    #Buffer,d0
  113.     move.l    #$10001,d1
  114.     Call    AllocMem
  115.     move.l    d0,Mem
  116.     beq    ErrorMem
  117.  
  118. ; try open this file and check identity
  119.  
  120.     LibBase    dos
  121.     move.l    IFile(pc),d1
  122.     move.l    #MODE_OLDFILE,d2
  123.     Call    Open
  124.     move.l    d0,Han
  125.     beq    ErrorOpen
  126.  
  127.     move.l    #StartTxt,d1
  128.     Call    PutStr
  129.  
  130.     xRead    #IFile,4
  131.  
  132.     move.l    IFile(pc),d0
  133.     cmp.l    #ID_TRAX,d0
  134.     beq    TRAX
  135.     cmp.l    #ID_TLC,d0
  136.     bne    Errortype
  137.  
  138. *------------------------------------------------------------------------------------------------------------*
  139. TLC    ;Read header of file
  140.  
  141.     xRead    Mem(pc),16
  142.     FPrint    HeadWin        ;dump window positions when saved
  143.  
  144. ; read misc paths/names
  145.  
  146.     ReadString
  147.     FPrint    TrackPath
  148.     ReadString
  149.     FPrint    CuelistPath
  150.     ReadString
  151.     FPrint    TrackName
  152.     ReadString
  153.     FPrint    CuelistName
  154.  
  155. ; read main header
  156.  
  157.     xRead    Mem(pc),6    ;skip 6 bytes for now
  158.  
  159. ;1.1 - check if null, if not dump:
  160.  
  161.     move.l    Mem(pc),a0
  162.     tst.l    (a0)
  163.     bne    .dumpSk
  164.     tst.w    4(a0)
  165.     beq    .noNews
  166.  
  167. .dumpSk
  168.     FPrint    HeaderNews
  169.  
  170. ; dump fade-in/out type:
  171.  
  172. .noNews    bsr    FadeType
  173.     FPrint    FadeinType
  174.     bsr    FadeType
  175.     FPrint    FadeoutType
  176.  
  177. ; dump maximum time, grid spacing, cuelist start and total length
  178.  
  179.     bsr    GetFloat
  180.     FPrint    MaxTime
  181.     bsr    GetFloat
  182.     FPrint    GridSpace
  183.     bsr    GetFloat
  184.     FPrint    StartTime
  185.  
  186.     xRead    Mem(pc),4
  187.     bsr    CalcTime
  188.     FPrint    TotalLength
  189.     xRead    Mem(pc),4
  190.     bsr    CalcTime
  191.     FPrint    ViewSize
  192.     xRead    Mem(pc),4
  193.     bsr    CalcTime
  194.     FPrint    ViewStart
  195.  
  196.     move.l    Mem(pc),a2
  197.     xRead    a2,4        ;BPM
  198.     lea    4(a2),a2
  199.     xRead    a2,4        ;X/
  200.     lea    4(a2),a2
  201.     xRead    a2,4        ; /Y
  202.     FPrint    BPM
  203.  
  204. ; time options
  205.  
  206.     xRead    Mem(pc),4
  207.     move.l    Mem(pc),a0
  208.     move.l    (a0),Temp
  209.     move.l    (a0),d0
  210.     beq    .hms
  211.     cmp.w    #TLCTIME_SMPTE,d0
  212.     beq    .smpte
  213.     cmp.w    #TLCTIME_SMPTEPLUS,d0
  214.     beq    .smpteplus
  215.     cmp.w    #TLCTIME_BPM,d0
  216.     bne    .unknown
  217.  
  218. .bpm    move.l    #TIMEBPM,(a0)
  219.     bra    .showTime
  220. .hms    move.l    #TIMEHMS,(a0)
  221.     bra    .showTime
  222. .smpte    move.l    #TIMESMPTE,(a0)
  223.     bra    .showtime
  224. .smpteplus
  225.     move.l    #TIMESMPTEPLUS,(a0)
  226.     bra    .showtime
  227. .unknown
  228.     move.l    Temp(pc),(a0)
  229.     FPrint    Unknown
  230.     bra    .skipTO
  231.  
  232. .showTime
  233.     FPrint    TimeOpts
  234.  
  235. .skipTO    xRead    Mem(pc),122    ;skip reserved data
  236.  
  237. ; read Fxx flag marks
  238.  
  239.     moveq    #1,d6
  240.     moveq    #9,d5
  241. .loop    bsr    GetFloat
  242.     move.l    Mem(pc),a5
  243.     move.l    (a5),d0
  244.     move.l    4(a5),d1
  245.     move.l    d0,4(a5)
  246.     move.l    d1,8(a5)
  247.     move.l    d6,(a5)
  248.     xRead    #Temp,4        ;skip view flag
  249.  
  250.     lea    16(a5),a5
  251.     move.l    a5,-4(a5)
  252.     xRead    a5,80+30
  253.  
  254.     move.l    Mem(pc),a5
  255.     cmp.l    #-1,4(a5)
  256.     bne    .markok
  257.     move.l    #NotInUse,12(a5)
  258. .markok    FPrint    FMark
  259.  
  260.     addq.l    #1,d6
  261.     dbra    d5,.loop
  262.  
  263. ; read red locate flag
  264.  
  265.     bsr    GetFloat
  266.     xRead    #Temp,4
  267.     move.l    Mem(pc),a0
  268.     lea    12(a0),a0
  269.     move.l    a0,-4(a0)
  270.     xRead    a0,80+30
  271.     FPrint    LocateF
  272.  
  273. ; read blue start flag
  274.  
  275.     bsr    GetFloat
  276.     xRead    #Temp,4
  277.     move.l    Mem(pc),a0
  278.     lea    12(a0),a0
  279.     move.l    a0,-4(a0)
  280.     xRead    a0,80+30
  281.     FPrint    StartF
  282.  
  283. ; read yellow punch-in flag
  284.  
  285.     bsr    GetFloat
  286.     xRead    #Temp,4
  287.     move.l    Mem(pc),a0
  288.     lea    12(a0),a0
  289.     move.l    a0,-4(a0)
  290.     xRead    a0,80+30
  291.     FPrint    PunchinF
  292.  
  293. ; read yellow punch-out flag
  294.  
  295.     bsr    GetFloat
  296.     xRead    #Temp,4
  297.     move.l    Mem(pc),a0
  298.     lea    12(a0),a0
  299.     move.l    a0,-4(a0)
  300.     xRead    a0,80+30
  301.     FPrint    PunchoutF
  302.  
  303. ; skip reserved space and start on the chunks
  304.  
  305.     xRead    Mem(pc),100
  306.  
  307.     clr.l    TrackNo
  308.  
  309. *------------------------------------------------------------------------------------------------------------*
  310. TRAX    LibBase    exec
  311.  
  312.     moveq    #0,d0
  313.     moveq    #0,d1
  314.     bset    #12,d1
  315.     Call    SetSignal
  316.     btst    #12,d0
  317.     bne    CtrlC
  318.  
  319.     LibBase    dos
  320.  
  321.     move.l    Mem(pc),a5
  322.     xRead    a5,4        ;get chunk name
  323.  
  324.     cmp.l    #ID_TYPE,(a5)
  325.     beq    CType
  326.     cmp.l    #ID_SAMP,(a5)
  327.     beq    CSamp
  328.     cmp.l    #ID_EVNT,(a5)
  329.     beq    CEvent
  330.     cmp.l    #ID_END,(a5)
  331.     beq    CEnd
  332.  
  333.     move.l    #UnknownChunk,d1
  334.     Call    PutStr
  335.     bra    Close
  336. *------------------------------------------------------------------------------------------------------------*
  337. CType    add.l    #1,TrackNo
  338.     move.l    #1,EntryNo
  339.  
  340.     move.l    Mem(pc),a0
  341.     move.l    TrackNo(pc),(a0)
  342.     FPrint    TypeNo
  343.  
  344.     ReadString
  345.     FPrint    TypeType
  346.  
  347.     cmp.l    #'Audi',4(a5)
  348.     beq    .audio
  349.     cmp.l    #'AREX',4(a5)
  350.     beq    .rexx
  351.  
  352.     move.l    #UnknownType,d1
  353.     Call    PutStr
  354.     bra    Close
  355.  
  356. .audio    ReadString
  357.     FPrint    TrackNam    ;name on audio track
  358.     bsr    GetFloat
  359.     FPrint    TrackFreq    ;frequency
  360.     bsr    EntryPrefs    ;show prefs for entries
  361.     FPrint    EntryUnsel
  362.     bsr    EntryPrefs    ;show prefs for entries
  363.     FPrint    EntrySel
  364.     bsr    TrackStatus    ;show track status
  365.     FPrint    TrackStat
  366.     xRead    Mem(pc),1    ;skip entries prefs
  367.  
  368.     ReadString
  369.     FPrint    PlayChan
  370.     ReadString
  371.     FPrint    RecChan
  372.  
  373.     xRead    Mem(pc),100    ;skip reserved bytes
  374.     bra    TRAX
  375.  
  376. .rexx    ReadString
  377.     FPrint    TrackNam
  378.     ReadString
  379.     FPrint    PortNam
  380.     xRead    Mem(pc),2
  381.     bsr    TrackStatus
  382.     FPrint    TrackStat
  383.     xRead    Mem(pc),101    ;skip pad + reserved bytes
  384.     bra    TRAX
  385. *------------------------------------------------------------------------------------------------------------*
  386. CSamp    move.l    Mem(pc),a0
  387.     move.l    TrackNo(pc),(a0)+
  388.     move.l    EntryNo(pc),(a0)
  389.     FPrint    SampleNo
  390.     add.l    #1,EntryNo
  391.     add.l    #1,EntryTotal
  392.  
  393.     bsr    SampStatus
  394.     FPrint    SampleStatus    ;status of entry
  395.     bsr    GetFloat
  396.     FPrint    SampleStart    ;start pos
  397.     bsr    GetFloat
  398.     FPrint    SampleEnd    ;end pos
  399.     xRead    Mem(pc),4    ;reserved
  400.     xread    Mem(pc),4    ;group
  401.     move.l    Mem(pc),a0
  402.     tst.l    (a0)
  403.     beq    .noGRP
  404.     FPrint    SampleGroup    ;print group if any
  405. .noGRP    ReadString
  406.     FPrint    SampleName    ;path/name
  407.     xRead    Mem(pc),2
  408.     bsr    FadeType
  409.     FPrint    SampleFadein    ;fade-in type
  410.     bsr    FadeType
  411.     FPrint    SampleFadeout
  412.     bsr    GetFloat
  413.     FPrint    SampleFadeinT    ;fade-in time
  414.     bsr    GetFloat
  415.     FPrint    SampleFadeoutT
  416.     xRead    Mem(pc),4    ;crop-in
  417.     FPrint    SampleCropIn
  418.     xRead    Mem(pc),4    ;crop-in
  419.     FPrint    SampleCropOut
  420.  
  421.     xread    Mem(pc),2    ;volume
  422.     move.l    Mem(pc),a0
  423.     move.w    (a0),d0
  424.     ext.l    d0
  425.     asr.l    #5,d0
  426.     sub.l    #100,d0
  427.     move.l    d0,(a0)
  428.     FPrint    SampleVol
  429.  
  430.     xread    Mem(pc),4    ;pan
  431.     move.l    Mem(pc),a0
  432.     move.w    (a0),d0
  433.     asr.l    #5,d0
  434.  
  435.     move.l    #PanRight,(a0)
  436.     cmp.l    #100,d0
  437.     bgt    .right
  438.     move.l    #PanLeft,(a0)
  439. .right    cmp.l    #100,d0
  440.     beq    .center
  441.     tst.l    d0
  442.     beq    .left
  443.     cmp.l    #200,d0
  444.     bne    .panok
  445.     move.l    #PanFullRight,(a0)
  446.     bra    .panok
  447. .left    move.l    #PanFullLeft,(a0)
  448.     bra    .panok
  449. .center    move.l    #PanCenter,(a0)
  450. .panOk    FPrint    SamplePan
  451.  
  452.     xRead    Mem(pc),50    ;reserved space
  453.     bra    TRAX
  454. *------------------------------------------------------------------------------------------------------------*
  455. CEnd    xRead    Mem(pc),4
  456.     move.l    Mem(pc),a0
  457.     cmp.l    #ID_END,(a0)
  458.     beq    EndOfFile
  459.     move.l    Han(pc),d1
  460.     moveq    #-4,d2
  461.     move.l    #OFFSET_CURRENT,d3
  462.     Call    Seek
  463.     bra    TRAX
  464. *------------------------------------------------------------------------------------------------------------*
  465. CEvent    move.l    Mem(pc),a0
  466.     move.l    TrackNo(pc),(a0)+
  467.     move.l    EntryNo(pc),(a0)
  468.     FPrint    EventNo
  469.     add.l    #1,EntryNo
  470.     add.l    #1,EntryTotal
  471.  
  472.     xRead    Mem(pc),4
  473.     move.l    Mem(pc),a0
  474.     move.l    (a0),d0
  475.     move.l    #EventUnsel,(a0)
  476.     tst.w    d0
  477.     beq    .noStat
  478.     move.l    #EventSel,(a0)
  479.  
  480. .noStat    FPrint    EventStatus    ;status of entry
  481.     bsr    GetFloat
  482.     FPrint    EventStart    ;start pos
  483.     bsr    GetFloat
  484.  
  485.     xRead    Mem(pc),4    ;skip End and reserved
  486.     xRead    Mem(pc),4    ;Group
  487.  
  488.     move.l    Mem(pc),a0
  489.     move.l    (a0),d0
  490.     beq    .noEGRP
  491.     FPrint    EventGroup
  492. .noEGRP    xRead    Mem(pc),4    ;skip reserved
  493.  
  494.     ReadString
  495.     FPrint    EventName    ;event name
  496.  
  497.     xRead    Mem(pc),4    ;SMPTE stamp
  498.     move.l    Mem(pc),a0
  499.     move.l    (a0),d0
  500.     
  501.     move.b    d0,d1
  502.     asr.l    #8,d0
  503.     and.l    #$ff,d1
  504.     move.w    d1,6(a0)
  505.  
  506.     move.b    d0,d1
  507.     asr.l    #8,d0
  508.     and.l    #$ff,d1
  509.     move.w    d1,4(a0)
  510.  
  511.     move.b    d0,d1
  512.     asr.l    #8,d0
  513.     and.l    #$ff,d1
  514.     move.w    d1,2(a0)
  515.  
  516.     move.b    d0,d1
  517.     asr.l    #8,d0
  518.     and.l    #$ff,d1
  519.     move.w    d1,(a0)
  520.  
  521.     FPrint    EventStamp    
  522.  
  523.     moveq    #8,d5
  524. .cmdlp    ReadString
  525.     FPrint    EventCmd
  526.     move.l    Mem(pc),a0
  527.     clr.l    4(a0)
  528.     dbra    d5,.cmdlp
  529.  
  530.     xRead    Mem(pc),50
  531.  
  532.     bra    TRAX
  533. *------------------------------------------------------------------------------------------------------------*
  534. EndOfFile
  535.     move.l    Mem(pc),a0
  536.     move.l    TrackNo(pc),(a0)+
  537.     move.l    EntryTotal(pc),(a0)
  538.     FPrint    Total
  539.     bra    Close
  540.  
  541. CtrlC    LibBase    dos
  542.     move.l    #BreakTxt,d1
  543.     Call    PutStr
  544. *------------------------------------------------------------------------------------------------------------*
  545. Close    LibBase    dos
  546.     move.l    Han(pc),d1
  547.     beq    .noHan
  548.     Call    Close
  549.  
  550. .noHan    LibBase    exec
  551.     move.l    Mem(pc),d0
  552.     beq    .noMem
  553.     move.l    d0,a1
  554.     move.l    #Buffer,d0
  555.     Call    FreeMem
  556.  
  557. .noMem    Return    0
  558. *»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»*
  559. CalcTime
  560.     StackOn
  561.  
  562.     LibBase    mathieeesingbas
  563.  
  564.     moveq    #100,d0
  565.     Call    IEEESPFlt    ;convert freq. to float
  566.     move.l    d0,d2
  567.     move.l    Mem(pc),a0
  568.     move.l    (a0),d0
  569.     Call    IEEESPFlt    ;convert samples to float
  570.     move.l    d2,d1
  571.     Call    IEEESPDiv    ;div them to find seconds
  572.     Call    IEEESPFix
  573.  
  574.     move.l    Mem(pc),a0
  575.     move.l    d0,d1        ;seconds
  576.     divu    #60,d1        ;minutes
  577.     ext.l    d1
  578.     move.l    d1,4(a0)
  579.     mulu    #60,d1
  580.     sub.l    d1,d0
  581.     move.l    d0,8(a0)
  582.  
  583.     move.l    4(a0),d0
  584.     move.l    d0,d1
  585.     divu    #60,d1        ;hours
  586.     ext.l    d1
  587.     move.l    d1,(a0)
  588.     mulu    #60,d1
  589.     sub.l    d1,d0
  590.     move.l    d0,4(a0)
  591.  
  592.     StackOff
  593.     rts
  594. *»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»*
  595. EntryPrefs
  596.     StackOn
  597.  
  598.     xRead    Mem(pc),1
  599.     move.l    Mem(pc),a0
  600.     move.b    (a0),d0
  601.  
  602.     move.l    #NoPrefs,(a0)
  603.     move.l    #Blank,4(a0)
  604.     move.l    #Blank,8(a0)
  605.     move.l    #Blank,12(a0)
  606.  
  607.     btst    #TYPAPREFB_SHOWREGIONNAME,d0
  608.     beq    .noRegName
  609.     move.l    #SRegionName,(a0)+
  610.  
  611. .noRegName
  612.     btst    #TYPAPREFB_SHOWSTARTTIME,d0
  613.     beq    .noStartTime
  614.     move.l    #SStartTime,(a0)+
  615.  
  616. .noStartTime
  617.     btst    #TYPAPREFB_SHOWSAMPLESIZE,d0
  618.     beq    .noSampleSize
  619.     move.l    #SSampleSize,(a0)+
  620.  
  621. .noSampleSize
  622.     btst    #TYPAPREFB_SHOWFADETIME,d0
  623.     beq    .noFadeTime
  624.     move.l    #SFadeTime,(a0)
  625.  
  626. .noFadeTime
  627.  
  628.     StackOff
  629.     rts
  630. *------------------------------------------------------------------------------------------------------------*
  631. TrackStatus
  632.     StackOn
  633.  
  634.     xRead    Mem(pc),1
  635.     move.l    Mem(pc),a0
  636.     move.b    (a0),d0
  637.  
  638.     move.l    #Blank,(a0)
  639.     move.l    #Blank,4(a0)
  640.     move.l    #Blank,8(a0)
  641.  
  642.     btst    #TYPTRACKB_SOUNDBUTTONON,d0
  643.     beq    .noSnd
  644.     move.l    #TSound,(a0)+
  645.  
  646. .noSnd    btst    #TYPTRACKB_SOLOBUTTONON,d0
  647.     beq    .noSolo
  648.     move.l    #TSolo,(a0)+
  649.  
  650. .noSolo    btst    #TYPTRACKB_TRACKSELECTED,d0
  651.     beq    .noSel
  652.     move.l    #TTrack,(a0)+
  653.  
  654. .noSel    StackOff
  655.     rts
  656. *------------------------------------------------------------------------------------------------------------*
  657. SampStatus
  658.     StackOn
  659.  
  660.     xRead    Mem(pc),4
  661.     move.l    Mem(pc),a0
  662.  
  663.     move.l    (a0),d0
  664.     move.l    #SampNoexist,(a0)
  665.  
  666.     tst.w    d0
  667.     beq    .exit
  668.     cmp.w    #SAMPSTAT_NOEXISTSEL,d0
  669.     beq    .setSel
  670.     cmp.w    #SAMPSTAT_OK,d0
  671.     beq    .setOk
  672.     cmp.w    #SAMPSTAT_OKSEL,d0
  673.     beq    .setOkS
  674.  
  675.     move.l    #SampUnknown,(a0)
  676.     bra    .exit
  677.  
  678. .setSel    move.l    #SampNoexistS,(a0)
  679.     bra    .exit
  680. .setOk    move.l    #SampOK,(a0)
  681.     bra    .exit
  682. .setOkS    move.l    #SampOKS,(a0)
  683.  
  684. .exit    StackOff
  685.     rts
  686. *------------------------------------------------------------------------------------------------------------*
  687. FadeType
  688.     StackOn
  689.     xRead    Mem(pc),1
  690.  
  691.     move.l    Mem(pc),a0
  692.     move.b    (a0),d0
  693.     beq    .setLin
  694.     cmp.b    #FADE_BUTT,d0
  695.     beq    .setButt
  696.     cmp.b    #FADE_LOGA,d0
  697.     beq    .setLoga
  698.     cmp.b    #FADE_EXPO,d0
  699.     bne    .unknown
  700.  
  701. .setExpo
  702.     move.l    #Exponential,(a0)
  703.     bra    .showFade
  704. .setLoga
  705.     move.l    #Logaritmic,(a0)
  706.     bra    .showFade
  707. .setLin
  708.     move.l    #Linear,(a0)
  709.     bra    .showFade
  710. .setButt
  711.     move.l    #Butt,(a0)
  712.     bra    .showFade
  713. .unknown
  714.     move.l    #Unknown,(a0)
  715.  
  716. .showFade
  717.     StackOff
  718.     rts
  719. *------------------------------------------------------------------------------------------------------------*
  720. GetFloat
  721.     StackOn
  722.  
  723.     LibBase    dos
  724.     move.l    Han(pc),d1
  725.     move.l    #FloatNum,d2
  726.     moveq    #8,d3
  727.     Call    Read
  728.     cmp.l    d0,d3
  729.     bne    .error
  730.  
  731.     LibBase    mathieeedoubbas
  732.  
  733.     move.l    FloatNum(pc),d0
  734.     move.l    FloatNum+4(pc),d1
  735.  
  736.     Call    IEEEDPFloor
  737.  
  738.     move.l    d0,d2
  739.     move.l    d1,d3
  740.  
  741.     Call    IEEEDPFix        ;convert number to integer
  742.     move.l    d0,d5            ;mantissa
  743.  
  744.     move.l    FloatNum(pc),d0        ;get original number again
  745.     move.l    FloatNum+4(pc),d1
  746.     Call    IEEEDPSub        ;subtract no dec. number from original number
  747.  
  748.     move.l    d0,d6            ;=decimal only
  749.     move.l    d1,d7
  750.  
  751.     move.l    #10000,d0
  752.     Call    IEEEDPFlt        ;convert to float = max number of decimal (4)
  753.  
  754.     move.l    d6,d2            ;get decimal
  755.     move.l    d7,d3
  756.     Call    IEEEDPMul        ;multiply
  757.  
  758.     Call    IEEEDPFix        ;convert to integer
  759.  
  760.     move.l    Mem(pc),a0
  761.     move.l    d0,4(a0)        ;exponent
  762.     move.l    d5,(a0)
  763.  
  764. .exit    StackOff
  765.     rts
  766.  
  767. .error    move.l    #ErrRead,d1
  768.     Call    PutStr
  769.     bra    .exit
  770. *------------------------------------------------------------------------------------------------------------*
  771. ReadStr    StackOn
  772.  
  773.     LibBase    dos
  774.  
  775.     move.l    Han(pc),d1
  776.     move.l    #Temp,d2
  777.     moveq    #4,d3
  778.     Call    Read
  779.     cmp.l    d0,d3
  780.     bne    .error
  781.  
  782.     move.l    Han(pc),d1
  783.     move.l    Mem(pc),d2
  784.     addq.l    #4,d2
  785.     move.l    Temp(pc),d3
  786.     beq    .exit
  787.     Call    Read
  788.     cmp.l    d0,d3
  789.     bne    .error
  790.  
  791.     move.l    Mem(pc),a0
  792.     move.l    a0,d0
  793.     addq.l    #4,d0
  794.     move.l    d0,(a0)
  795.  
  796.     move.l    Mem(pc),a0
  797.     move.l    Temp(pc),d0
  798.     clr.b    4(a0,d0.w)
  799.  
  800. .exit    StackOff
  801.     rts
  802.  
  803. .error    move.l    #ErrRead,d1
  804.     Call    PutStr
  805.     bra    .exit
  806. *------------------------------------------------------------------------------------------------------------*
  807. FPrintSub
  808.     StackOn
  809.  
  810.     LibBase    exec
  811.     move.l    Mem(pc),a1
  812.     lea    Proc(pc),a2
  813.     lea    Buffer/2(a1),a3
  814.     Call    RawDoFmt
  815.  
  816.     LibBase    dos
  817.     move.l    Mem(pc),d1
  818.     add.l    #Buffer/2,d1
  819.     Call    PutStr
  820.  
  821.     StackOff
  822.     rts
  823.  
  824. Proc    move.b    d0,(a3)+
  825.     rts
  826. *------------------------------------------------------------------------------------------------------------*
  827.  
  828.     Dump    Mem
  829.     Dump    Open
  830.     Dump    Read
  831.     Dump    Type
  832.  
  833. About    move.l    #AboutTxt,d1
  834.  
  835. Print    LibBase    dos
  836.     Call    PutStr
  837.     bra    Close
  838. *»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»*
  839. IFile        dc.l    0
  840. Han        dc.l    0
  841. Mem        dc.l    0
  842. Temp        dc.l    0
  843. FloatNum    dc.l    0,0
  844. TrackNo        dc.l    0
  845. EntryNo        dc.l    0
  846. EntryTotal    dc.l    0
  847. *»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»*
  848. ErrMem        dc.b    "Out of memory!",10,0
  849. ErrOpen        dc.b    "Couldn't open the file!",10,0
  850. ErrRead        dc.b    "Error reading file!",10,0
  851. ErrType        dc.b    "Not a 'TLC1' or 'TRAX' file!",10,0
  852.  
  853. StartTxt    dc.b    10,"CUELIST AND TRACK DUMPER version 1.0",10
  854.         dc.b    "Demo tool by Kenneth 'Kenny' Nilsen.",10,10,0
  855.  
  856. HeadWin        dc.b    "Cuelist window positions - Left: %ld  Top: %ld  Height: %ld  Width: %ld",10,10,0
  857. TrackPath    dc.b    "Track path           : %s",10,0
  858. CuelistPath    dc.b    "Cuelist path         : %s",10,0
  859. TrackName    dc.b    "Track name           : %s",10,0
  860. CuelistName    dc.b    "Cuelist name         : %s",10,10,0
  861. FadeinType    dc.b    "PREFS",10,10,"Default Fade-in type : %s",10,0
  862. FadeoutType    dc.b    "Default Fade-out type: %s",10,0
  863. MaxTime        dc.b    "Maximum fadetime     : %ld.%04.lu s",10,0
  864. GridSpace    dc.b    "Grid spacing         : %ld.%04.lu s",10,0
  865. StartTime    dc.b    "Cuelist start time   : %ld.%04.lu s",10,0
  866. TotalLength    dc.b    "Total Cuelist length : %luh %2.lum %2.lus",10,0
  867. ViewSize    dc.b    "View size position   : %luh %2.lum %2.lus",10,0
  868. ViewStart    dc.b    "View start position  : %luh %2.lum %2.lus",10,0
  869. BPM        dc.b    "Beats Per minuttes   : %lu (%lu/%lu) BPM",10,0
  870. TimeOpts    dc.b    "Timer options        : %s",10,10,"FLAGS IN USE:",10,10,0
  871. FMark        dc.b    "F%02.ld flag             : %ld.%04.lu s [%s].",10,0
  872. LocateF        dc.b    "Red Locate flag      : %ld.%04.lu s [%s]",10,0
  873. StartF        dc.b    "Blue Start flag      : %ld.%04.lu s [%s]",10,0
  874. PunchinF    dc.b    "Yellow Punch-In flag : %ld.%04.lu s [%s]",10,0
  875. PunchoutF    dc.b    "Yellow Punch-out flag: %ld.%04.lu s [%s]",10,10,"CHUNKS:",10,10,0
  876.  
  877. TypeNo        dc.b    12,10,"TYPE CHUNK",10,10,"Track number         : %ld",10,0
  878. TypeType    dc.b    "TYPE type            : %s",10,0
  879. TrackNam    dc.b    "Track name           : %s",10,0
  880. TrackFreq    dc.b    "Track frequency      : %ld.%04.lu Hz",10,0
  881. EntryUnSel    dc.b    "Entry pref unselected: %s%s%s%s",10,0
  882. EntrySel    dc.b    "Entry pref selected  : %s%s%s%s",10,0
  883. TrackStat    dc.b    "Track status         : %s%s%s",10,0
  884. PlayChan    dc.b    "Play at channel      : %s",10,0
  885. RecChan        dc.b    "Record at channel    : %s",10,10,0
  886. PortNam        dc.b    "Port name            : %s",10,0
  887.  
  888. SampleNo    dc.b    12,10,"SAMP CHUNK",10,10,"Track number         : %ld",10,"Sample number        : %ld",10,0
  889. SampleStatus    dc.b    "Sample status        : %s",10,0
  890. SampleStart    dc.b    "Start pos. of sample : %ld.%04.lu s",10,0
  891. SampleEnd    dc.b    "End pos. of sample   : %ld.%04.lu s",10,0
  892. SampleGroup    dc.b    "Group ID             : %ld",10,0
  893. SampleName    dc.b    "Sample path/name     : %s",10,0
  894. SampleFadein    dc.b    "Fade-in type         : %s",10,0
  895. SampleFadeout    dc.b    "Fade-out type        : %s",10,0
  896. SampleFadeinT    dc.b    "Fade-in time         : %ld.%04.lu s",10,0
  897. SampleFadeoutT    dc.b    "Fade-out time        : %ld.%04.lu s",10,0
  898. SampleCropIn    dc.b    "Crop-In              : %lu samples",10,0
  899. SampleCropOut    dc.b    "Crop-Out             : %lu samples",10,0
  900. SampleVol    dc.b    "Volume               : %ld dB",10,0
  901. SamplePan    dc.b    "Pan                  : %s",10,0
  902.  
  903. EventNo        dc.b    12,10,"EVNT CHUNK",10,10,"Track number         : %ld",10,"Event number         : %ld",10,0
  904. EventStatus    dc.b    "Event status         : %s",10,0
  905. EventStart    dc.b    "Event start position : %ld.%04.lu s",10,0
  906. EventGroup    dc.b    "Event group          : %ld",10,0
  907. EventName    dc.b    "Event name           : %s",10,0
  908. EventStamp    dc.b    "SMPTE stamp          : %02.u:%02.u:%02.u:%02.u",10,0
  909. EventCmd    dc.b    "Event command        : %s",10,0
  910.  
  911. EventUnsel    dc.b    "UNSELECTED",0
  912. EventSel    dc.b    "SELECTED",0
  913.  
  914. Total        dc.b    12,10,"-------------------------------------------------------------",10
  915.         dc.b    "TOTAL NUMBER OF TRACKS : %lu",10
  916.         dc.b    "TOTAL NUMBER OF ENTRIES: %lu",10,10,0
  917. BreakTxt    dc.b    10,"*** USER BREAK!",10,10,0
  918.  
  919. PanLeft        dc.b    "Left",0
  920. PanFullLeft    dc.b    "Full left",0
  921. PanRight    dc.b    "Right",0
  922. PanFullRight    dc.b    "Full right",0
  923. PanCenter    dc.b    "Center",0
  924.  
  925. SampNoexist    dc.b    "NOEXIST",0
  926. SampNoexistS    dc.b    "NOEXIST+SELECTED",0
  927. SampOK        dc.b    "OK",0
  928. SampOKS        dc.b    "OK+SELECTED",0
  929. SampUnknown    dc.b    "<unknown - report to author!>",0
  930.  
  931. SRegionName    dc.b    "Regionname/",0
  932. SStartTime    dc.b    "Starttime/",0
  933. SSampleSize    dc.b    "Samplesize/",0
  934. SFadetime    dc.b    "Fadetime",0
  935.  
  936. TSound        dc.b    "SOUND ON/",0
  937. TSolo        dc.b    "SOLO ON/",0
  938. TTrack        dc.b    "TRACK ON",0
  939.  
  940. TSoundOff    dc.b    "SOUND OFF/",0
  941. TSoloOff    dc.b    "SOLO OFF/",0
  942. TTrackOff    dc.b    "TRACK OFF",0
  943.  
  944. TIMEBPM        dc.b    "Beats Per Minutes (BPM)",0
  945. TIMEHMS        dc.b    "Hours Minutes Seconds",0
  946. TIMESMPTE    dc.b    "SMPTE",0
  947. TIMESMPTEPLUS    dc.b    "SMPTE PLUS",0
  948.  
  949. Exponential    dc.b    "Exponential",0
  950. Logaritmic    dc.b    "Logarithmic",0
  951. Linear        dc.b    "Linear",0
  952. Butt        dc.b    "Butt",0
  953. UNKNOWN        dc.b    "Timer options        : <unknown type (0x%08.lx) - report to author>",10,10,"FLAGS IN USE:",10,10,0
  954.  
  955. HeaderNews    dc.b    "<unknown content (0x%04.x 0x%04.x 0x%04.x) - please report to author!>",10,10,0
  956.  
  957. UnknownChunk    dc.b    10,"WARNING: Unknown chunk in file! Tell author - quitting...",10,10,0
  958. UnknownType    dc.b    10,"WARNING: Unknown TYPE chunk! Tell author - quitting...",10,10,0
  959.  
  960. NotInUse    dc.b    "<not in use>",0
  961. NoPrefs        dc.b    "<No Prefs>"
  962. Blank        dc.b    0
  963.  
  964. AboutTxt    dc.b    10,27,"[1mDumpCue",27,"[0m 1.0 by Kenneth 'Kenny' Nilsen (kenny@bgnett.no)",10,10
  965.         dc.b    "    USAGE: [Cuelistfile | Trackfile]",10,10
  966.         dc.b    "Dumps the content of the file to console.",10
  967.         dc.b    "Redirect to a file and use the 'more' command to read it.",10,10,0
  968. *»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»*
  969.